import 	{sleep}  from '../../../function/test.js'

// 视频初始化时
export default {
	data(){
		return {
			// 修复onReadyLogo视频播放前的logo加载等其他img面板，进入全屏后就错位的bug。
			onReady_imgView: true,//由于rpx是动态的，当进入全屏和退出全屏时，会重新计算大小和位置。如果不先销毁再重绘，view元素就会错位

			// 是否显示手动控制播放界面(当组件属性上绑定的 :autoplay="false" 时并且播放器进入等待播放状态时，则显示此界面)
			isManualplay: false,//下方会用到
			// 在getNetworkType.js会自动根据网络状态设置对应内容
			isManualplay_text: ''//手动控制播放界面 提示内容（如：当前为移动网络，继续播放将消耗手机流量）
		}
	},
	watch:{
		isFullScreenChange:{
			async handler(newChange,oldChange){
				/* 20222-0113 新增优化
				 * 用于修复场景：比如用户是在全屏状态下切换集数的时候，当这一集还没进入播放状态时。
				 * 用户就退出了全屏，然后就会看到onReadyLogo（视频初始化播放前logo）错位了。
				 */ 

				// 当进入全屏或退出全屏时，如果imgView是true，就执行重绘，否则会样式错位。
				if (this.onReady_imgView==true){
					// 延时400毫秒
					await sleep(400)
					// 重绘onReady_imgView
					this.get_Refresh_onReady_imgView()
				}
			},
			immediate: false,//不用监听第一次变化
		},
		// 监听是否播放状态
		isPlay:{
			handler(newPlay,oldPlay){
				if (newPlay == true){
					// 关闭手动控制播放界面
					this.isManualplay = false
				}
			},
			immediate: true,
		}
	},
	methods:{
		// 公用初始化播放（用于 当视频数据列表更新时、当视频索引更新时 执行）
		async VideoPlayerInit(event){
			// 视频数据和索引更新时重置
			this.VideoIndexUpdata()
			// 判断是否需要重绘元素？初始化播放时任务
			if (event!==undefined && event.Reset_onReady == false) {
				// 不用重绘元素
			}else {
				// 重置所有的onReady初次任务（需要重绘元素）
				await this.Reset_onReady(event)
			}
			
			
			

			/* ! 暂时不需要
			// 获取是否VIP会员
			let UserVip = this.isUserVIP
			// 判断是否是VIP用户
			this.getIsUserVip(UserVip)
			 */
			
			
			// 判断当前视频item是否包含视频广告，设置播放
			await this.isAdVideoSrc()
						
			// 获取视频索引
			let index = this.VideoSrcIndex
			// 获取视频标题
			let title = this.getVideoTitle(index)
			// 设置视频标题
			this.SetVideoTitle(title)//FatFatMeng-VideoPlayer.vue
			// 判断是否?暂无下一集，为false则设置
			this.SetVideoisNextPlay(index)//FatFatMeng-VideoPlayer.vue
			// 判断组件上绑定的是否是自动播放
			if (this.autoplay==false){
				// 显示控制面板
				this.isShowCommFullScreen()
			}else {
				// 自动播放，会在开始播放状态里执行 显示控制面板
			}
		},
		
		// 判断当前视频是否包含广告视频
		async isAdVideoSrc(){
			// 获取当前视频索引
			let VideoIndex = this.VideoSrcIndex
			
			// 判断是否有广告视频链接并且是否VIP用户
			if (!this.isUserVIP&&this.VideoSrcList[VideoIndex].adVideolist !== undefined && this.VideoSrcList[VideoIndex].adVideolist[0].url !== undefined){
				/*！有视频前贴广告链接并且不是VIP用户，先播放广告再播放视频 */
				
				await this.bofang_adVideo()
				
			} else {
				/*！无视频前贴广告链接，直接播放视频*/
				
				await this.bofang_myVideo()

			}
			
		},
		
		// 播放当前索引的 广告视频
		async bofang_adVideo(){
			// 设置 video组件 ref = adVideo ；类型 = 广告视频
			this.ref_type = 'ad'
			
			// 获取当前视频索引
			let VideoIndex = this.VideoSrcIndex
			// 获取 广告视频 信息
			let adItem = this.VideoSrcList[VideoIndex].adVideolist[0]
			
			// 设置 src链接 = 广告视频链接
			this.src = adItem.url
			// 设置 指定视频初始播放位置，单位为秒（s）
			this.initialtime = adItem.adinitTime
			// 设置 指定视频时长，单位为秒（s）
			this.duration = adItem.adDuration
			
			await sleep(100)
			// 判断 是否自动播放
			if (this.autoplay == true){
				this.video_autoplay = true
				// 自动播放 广告视频
				this.play({Reset_backRate:true})
				// {Reset_backRate:true} 代表播放并重置倍速
			}else {
				// 不自动播放
				this.isPlay = false
				this.isPlaybtn = false
				
				// 组件上绑定了 不自动播放 显示 是否播放的UI控件 下个版本更新
				// 当前版本 可以手动点击 控制面板上的播放按钮 去播放
				
				// 显示【20】手动控制播放的界面
				this.isManualplay = true
			}
			// 广告播放完毕监听在 createVideoContext/adVudeo.js
			// 当 广告播放完毕时 执行如下方法 this.bofang_myVideo()
		},
		
		// 播放当前索引的 正常视频
		async bofang_myVideo(){
			// 获取当前视频索引
			let VideoIndex = this.VideoSrcIndex
			// [新版本] 写入当前视频链接 先判断再设置src
			// [新版本] 2021-1219 新增判断，不判断下，如果不设置UrlHDRlist则不会播放，因为获取的是空的，无法继续向下执行
			// if (this.VideoSrcList[VideoIndex].UrlHDRlist == undefined && this.VideoSrcList[VideoIndex].src !== undefined && this.VideoSrcList[VideoIndex].src !== '') {
			// 	// 无清晰度配置项，则使用默认url作为src播放链接
			// 	this.src = this.VideoSrcList[VideoIndex].url
			// 	// 无清晰度配置项，则重置清晰度索引 = 0
			// 	this.HDRIndex = 0
			// }else
			// if (this.VideoSrcList[VideoIndex].UrlHDRlist[this.HDRIndex].url !== undefined && this.VideoSrcList[VideoIndex].UrlHDRlist[this.HDRIndex].url !== '') {
			// 	// 有清晰度链接，则默认使用清晰度链接作为src播放链接
			// 	// 获取所选的清晰度索引视频链接，默认索引 = 0
			// 	let HDRIndexUrl = this.VideoSrcList[VideoIndex].UrlHDRlist[this.HDRIndex].url
			// 	this.src = HDRIndexUrl
			// }
			
			/* 3.3.6.8 新增优化，上方为老代码，已废弃
			 * 获取清晰度索引，设置清晰度链接。
			 * 如果清晰度索引 = 0 ，则直接获取默认url，否则使用清晰度索引url
			 */
			// 默认清晰度索引 = 0 ，当用户切换了清晰度，此索引会改变
			if (this.HDRIndex == 0) {
				// 无清晰度配置项，使用默认url作为src播放链接
				this.src = this.VideoSrcList[VideoIndex].url || this.VideoSrcList[VideoIndex].UrlHDRlist[0].url
				// 无清晰度配置项，则重置清晰度索引 = 0
				this.HDRIndex = 0
			}else {
				// 判断当前切换的视频是否有清晰度链接（比如第一集有，第二集就没有了）
				if (this.VideoSrcList[VideoIndex].UrlHDRlist !== undefined){
					// 有清晰度数组，再判断是否有清晰度索引对应的url
					if (this.VideoSrcList[VideoIndex].UrlHDRlist[this.HDRIndex] !== undefined && this.VideoSrcList[VideoIndex].UrlHDRlist[this.HDRIndex].url !== undefined) {
						// 有清晰度链接，则默认使用清晰度链接作为src播放链接
						// 获取所选的清晰度索引视频链接，默认索引 = 0
						let HDRIndexUrl = this.VideoSrcList[VideoIndex].UrlHDRlist[this.HDRIndex].url
						this.src = HDRIndexUrl
					}else {
						// 当前集数无此清晰度（清晰度索引对应的url）

						// 无清晰度配置项，使用默认url作为src播放链接
						this.src = this.VideoSrcList[VideoIndex].url || this.VideoSrcList[VideoIndex].UrlHDRlist[0].url
						// 无清晰度配置项，则重置清晰度索引 = 0
						this.HDRIndex = 0
					}
					
				}else {
					// 无清晰度配置项，使用默认url作为src播放链接
					this.src = this.VideoSrcList[VideoIndex].url
					// 无清晰度配置项，则重置清晰度索引 = 0
					this.HDRIndex = 0
				}
			}
			
			
			
						
			// 设置 video组件 ref = myVideo ；类型 = 正常视频
			this.ref_type = 'my'
			// 直播源 = false 时
			if (this.islive_player == false) {
				// 设置 指定视频初始播放位置，单位为秒（s）
				this.initialtime = 0
				// 设置 指定视频时长，单位为秒（s）
				this.duration = 0 // 0表示不限制总时长
			}
			// 延时100毫秒再执行
			await sleep(100)
			// 2021-1217-1940 调整
			if (this.autoplay == true){
				this.video_autoplay = true
				// 无广告并且是VIP用户，直接播放
				this.play({Reset_backRate:true})
				// {Reset_backRate:true} 代表播放并重置倍速
			}else {
				// 不自动播放
				this.isPlay = false
				this.isPlaybtn = false
				// 组件上绑定了 不自动播放 显示 是否播放的UI控件 下个版本更新
				// 当前版本 可以手动点击 控制面板上的播放按钮 去播放
				
				// 显示【20】手动控制播放的界面
				this.isManualplay = true
			}
						
		},
		
		// 判断是否是VIP用户,是VIP用户才执行销毁视频广告播放器组件
		getIsUserVip(e){
			// 已废弃
		},
		
		
		// 获取视频标题 2021-1219新增方法
		getVideoTitle(index){
			// [新版本] 写入当前视频title标题 先判断再设置title
			// [新版本] 2021-1219 新增判断，不判断下，如果不设置UrlHDRlist则获取到的标题是空的
			if (this.VideoSrcList[index].UrlHDRlist == undefined) {
				// 无清晰度配置项，则使用默认title标题
				return this.VideoSrcList[index].title
			}else {
				// 有清晰度链接，则默认使用清晰度title标题
				// 获取所选的清晰度索引title标题，默认索引 = 0
				return this.VideoSrcList[index].UrlHDRlist[this.HDRIndex].title
			}
		},
		// 设置视频标题
		SetVideoTitle(title){
			this.VideoTitle = title
		},
		// 判断是否?暂无下一集，为false则设置
		SetVideoisNextPlay(index){
			// 获取视频数据列表的高度(条)
			let VideoSrcList_length = Number(this.VideoSrcList.length-1)
			// 判断是否相等
			if (index == VideoSrcList_length){
				// 相等，则设置“暂无下一集”
				this.isNextPlay = false
			}else {
				// 不相等，则设置“下一集”，如果不设置，用户再从最后一集跳第一集，就没有下一集按钮了
				this.isNextPlay = true
			}
		},
		// 重置所有的onReady初次任务
		async Reset_onReady(event){
			// 重新刷新onReadyLogo，修复样式错位
			await this.get_Refresh_onReady_imgView()

			// 重置 是否初始化播放状态（true = 已开启精彩即将开始）
			this.onReady_Init_PlayState = true
			// 播放器背景(开始播放前或视频出错)
			this.isVideoShowonReady_bg = true
			// 关闭loading
			this.isVideoShowLoadingCount.isVideoShowLoading = false
			// 判断是否需要重绘元素？初始化播放时任务
			if (event!==undefined && event.Reset_onReady == false) {
				// 不用重绘元素
			}else {
				// 重置 过渡动画show=false,当视频开始播放时会执行一次过渡动画，就显示出了了
				this.show = false
			}
			
			
			/* 2022-0112 重置倍速方法已迁移至play()
			 * 路径：createVideoContext/myvideo.js
			 * 必须在播放后调用，否则在有的设备上会导致视频无法播放
			 * 调用方法this.play({Reset_backRate:true})
			 */
			// 【已迁移】重置倍速=1.0 和 倍速索引=3
			//this.playbackRate(1.0,3)
			
			// 重置 video组件 ref = '' ；类型 = 无
			this.ref_type = ''
			// 重置 指定视频初始播放位置，单位为秒（s）
			this.initialtime = 0
			// 重置 指定视频时长，单位为秒（s）
			this.duration = 0 // 0表示不限制总时长

			// 重置 播放状态，然后在视频开始播放里恢复true
			this.isPlay = false 
			// 重置 清晰度切换状态 = false
			this.HDRseekEvent = false // 用于修复说明在commTap.js里
			
		},
		// 视频数据和索引更新时重置
		async VideoIndexUpdata(){
			/* 2022-0125 新增代码 
			 * 重置播放时间用于iOS平台模拟的直播时长
			 */
			this.timeUpdate[0].currentTime = 0
			this.timeUpdate[0].duration = 0
			this.timeUpdate[0].errorTime = 0
			this.timeUpdate[0].sliderValue = 0
			// 重制播放出错或出现缓冲时的时间(比如拖动进度，视频会出现缓冲)
			this.errorTime = 0//必须重制，不然ios和小程序下有bug,会一直显示loading
		},
		// 重新刷新onReadyLogo，修复进入全屏后，onReadyLogo就错位了，因为宽高度发生了变化，但是css样式没有实时更新，因为css只存在一次更新
		async get_Refresh_onReady_imgView(){
			// 此处主要修复 进入全屏后onReadyLogo等样式就错位的bug，然后再退出全屏时，切换集数也是样式错位了。因为高宽发送了变化，css只是首次的，css并没有刷新，所以会错位
			this.onReady_imgView = false
			// 延时100豪秒再=true，此时view元素就会重绘，修复样式错位的问题
			await sleep(100)
			this.onReady_imgView = true
			//console.log('重置onReady_imgView成功')
		}
	}
}